<!doctype html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8" />
    <title>dependency graph</title>
    <style>
      .node:active path,
.node:hover path,
.node.current path,
.node:active polygon,
.node:hover polygon,
.node.current polygon {
  stroke: fuchsia;
  stroke-width: 2;
}

.edge:active path,
.edge:hover path,
.edge.current path,
.edge:active ellipse,
.edge:hover ellipse,
.edge.current ellipse {
  stroke: url(#edgeGradient);
  stroke-width: 3;
  stroke-opacity: 1;
}

.edge:active polygon,
.edge:hover polygon,
.edge.current polygon {
  stroke: fuchsia;
  stroke-width: 3;
  fill: fuchsia;
  stroke-opacity: 1;
  fill-opacity: 1;
}

.edge:active text,
.edge:hover text {
  fill: fuchsia;
}

.cluster path {
  stroke-width: 3;
}

.cluster:active path,
.cluster:hover path {
  fill: #ffff0011;
}

div.hint {
  background-color: #000000aa;
  color: white;
  font-family: Arial, Helvetica, sans-serif;
  border-radius: 1rem;
  position: fixed;
  top: calc(50% - 4em);
  right: calc(50% - 10em);
  border: none;
  padding: 1em 3em 1em 1em;
}

.hint button {
  position: absolute;
  font-weight: bolder;
  right: 0.6em;
  top: 0.6em;
  color: inherit;
  background-color: inherit;
  border: 1px solid currentColor;
  border-radius: 1em;
  margin-left: 0.6em;
}

.hint a {
  color: inherit;
}

#button_help {
  color: white;
  background-color: #00000011;
  border-radius: 1em;
  position: fixed;
  top: 1em;
  right: 1em;
  font-size: 24pt;
  font-weight: bolder;
  width: 2em;
  height: 2em;
  border: none;
}

#button_help:hover {
  cursor: pointer;
  background-color: #00000077;
}

@media print {
  #button_help {
    display: none;
  }

  div.hint {
    display: none;
  }
}

    </style>
  </head>
  <body>
    <button id="button_help">?</button>
    <div id="hints" class="hint" style="display: none">
      <button id="close-hints">x</button>
      <span id="hint-text"></span>
      <ul>
        <li><b>Hover</b> - highlight</li>
        <li><b>Right-click</b> - pin highlight</li>
        <li><b>ESC</b> - clear</li>
      </ul>
    </div>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.0.2 (20251019.1705)
 -->
<!-- Title: dependency&#45;cruiser output Pages: 1 -->
<svg width="1230pt" height="864pt"
 viewBox="0.00 0.00 1230.00 864.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 860)">
<title>dependency&#45;cruiser output</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-860 1226.25,-860 1226.25,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_src</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M20,-8C20,-8 1202.25,-8 1202.25,-8 1208.25,-8 1214.25,-14 1214.25,-20 1214.25,-20 1214.25,-836 1214.25,-836 1214.25,-842 1208.25,-848 1202.25,-848 1202.25,-848 20,-848 20,-848 14,-848 8,-842 8,-836 8,-836 8,-20 8,-20 8,-14 14,-8 20,-8"/>
<text xml:space="preserve" text-anchor="middle" x="611.12" y="-835.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">src</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_src/cli</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M28,-499C28,-499 424.75,-499 424.75,-499 430.75,-499 436.75,-505 436.75,-511 436.75,-511 436.75,-599 436.75,-599 436.75,-605 430.75,-611 424.75,-611 424.75,-611 28,-611 28,-611 22,-611 16,-605 16,-599 16,-599 16,-511 16,-511 16,-505 22,-499 28,-499"/>
<text xml:space="preserve" text-anchor="middle" x="226.38" y="-598.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">cli</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_src/parse</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M480.75,-592C480.75,-592 1178.75,-592 1178.75,-592 1184.75,-592 1190.75,-598 1190.75,-604 1190.75,-604 1190.75,-756 1190.75,-756 1190.75,-762 1184.75,-768 1178.75,-768 1178.75,-768 480.75,-768 480.75,-768 474.75,-768 468.75,-762 468.75,-756 468.75,-756 468.75,-604 468.75,-604 468.75,-598 474.75,-592 480.75,-592"/>
<text xml:space="preserve" text-anchor="middle" x="829.75" y="-755.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">parse</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_src/parse/scxml</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M802.62,-660C802.62,-660 1170.75,-660 1170.75,-660 1176.75,-660 1182.75,-666 1182.75,-672 1182.75,-672 1182.75,-730 1182.75,-730 1182.75,-736 1176.75,-742 1170.75,-742 1170.75,-742 802.62,-742 802.62,-742 796.62,-742 790.62,-736 790.62,-730 790.62,-730 790.62,-672 790.62,-672 790.62,-666 796.62,-660 802.62,-660"/>
<text xml:space="preserve" text-anchor="middle" x="986.69" y="-729.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">scxml</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_src/parse/smcat</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M633.25,-600C633.25,-600 865,-600 865,-600 871,-600 877,-606 877,-612 877,-612 877,-640 877,-640 877,-646 871,-652 865,-652 865,-652 633.25,-652 633.25,-652 627.25,-652 621.25,-646 621.25,-640 621.25,-640 621.25,-612 621.25,-612 621.25,-606 627.25,-600 633.25,-600"/>
<text xml:space="preserve" text-anchor="middle" x="749.12" y="-639.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">smcat</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_src/render</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M468.75,-60C468.75,-60 1055.5,-60 1055.5,-60 1061.5,-60 1067.5,-66 1067.5,-72 1067.5,-72 1067.5,-434 1067.5,-434 1067.5,-440 1061.5,-446 1055.5,-446 1055.5,-446 468.75,-446 468.75,-446 462.75,-446 456.75,-440 456.75,-434 456.75,-434 456.75,-72 456.75,-72 456.75,-66 462.75,-60 468.75,-60"/>
<text xml:space="preserve" text-anchor="middle" x="762.12" y="-433.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">render</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_src/render/dot</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M802.62,-128C802.62,-128 1027.62,-128 1027.62,-128 1033.62,-128 1039.62,-134 1039.62,-140 1039.62,-140 1039.62,-198 1039.62,-198 1039.62,-204 1033.62,-210 1027.62,-210 1027.62,-210 802.62,-210 802.62,-210 796.62,-210 790.62,-204 790.62,-198 790.62,-198 790.62,-140 790.62,-140 790.62,-134 796.62,-128 802.62,-128"/>
<text xml:space="preserve" text-anchor="middle" x="915.12" y="-197.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">dot</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_src/render/scjson</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M802.62,-308C802.62,-308 1047.5,-308 1047.5,-308 1053.5,-308 1059.5,-314 1059.5,-320 1059.5,-320 1059.5,-408 1059.5,-408 1059.5,-414 1053.5,-420 1047.5,-420 1047.5,-420 802.62,-420 802.62,-420 796.62,-420 790.62,-414 790.62,-408 790.62,-408 790.62,-320 790.62,-320 790.62,-314 796.62,-308 802.62,-308"/>
<text xml:space="preserve" text-anchor="middle" x="925.06" y="-407.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">scjson</text>
</g>
<g id="clust9" class="cluster">
<title>cluster_src/render/scxml</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M633.62,-68C633.62,-68 877,-68 877,-68 883,-68 889,-74 889,-80 889,-80 889,-108 889,-108 889,-114 883,-120 877,-120 877,-120 633.62,-120 633.62,-120 627.62,-120 621.62,-114 621.62,-108 621.62,-108 621.62,-80 621.62,-80 621.62,-74 627.62,-68 633.62,-68"/>
<text xml:space="preserve" text-anchor="middle" x="755.31" y="-107.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">scxml</text>
</g>
<g id="clust10" class="cluster">
<title>cluster_src/render/vector</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M583.75,-218C583.75,-218 877.75,-218 877.75,-218 883.75,-218 889.75,-224 889.75,-230 889.75,-230 889.75,-288 889.75,-288 889.75,-294 883.75,-300 877.75,-300 877.75,-300 583.75,-300 583.75,-300 577.75,-300 571.75,-294 571.75,-288 571.75,-288 571.75,-230 571.75,-230 571.75,-224 577.75,-218 583.75,-218"/>
<text xml:space="preserve" text-anchor="middle" x="730.75" y="-287.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">vector</text>
</g>
<g id="clust11" class="cluster">
<title>cluster_src/transform</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M797,-522C797,-522 1007.62,-522 1007.62,-522 1013.62,-522 1019.62,-528 1019.62,-534 1019.62,-534 1019.62,-562 1019.62,-562 1019.62,-568 1013.62,-574 1007.62,-574 1007.62,-574 797,-574 797,-574 791,-574 785,-568 785,-562 785,-562 785,-534 785,-534 785,-528 791,-522 797,-522"/>
<text xml:space="preserve" text-anchor="middle" x="902.31" y="-561.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">transform</text>
</g>
<!-- src/cli/actions.mts -->
<g id="node1" class="node">
<title>src/cli/actions.mts</title>
<g id="a_node1"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/actions.mts" xlink:title="actions.mts">
<path fill="#ccffcc" stroke="black" d="M267.33,-584.88C267.33,-584.88 217.42,-584.88 217.42,-584.88 214.46,-584.88 211.5,-581.92 211.5,-578.96 211.5,-578.96 211.5,-573.04 211.5,-573.04 211.5,-570.08 214.46,-567.12 217.42,-567.12 217.42,-567.12 267.33,-567.12 267.33,-567.12 270.29,-567.12 273.25,-570.08 273.25,-573.04 273.25,-573.04 273.25,-578.96 273.25,-578.96 273.25,-581.92 270.29,-584.88 267.33,-584.88"/>
<text xml:space="preserve" text-anchor="start" x="219.5" y="-572.33" font-family="Helvetica,sans-Serif" font-size="9.00">actions.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts -->
<g id="node2" class="node">
<title>src/index&#45;node.mts</title>
<g id="a_node2"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/index-node.mts" xlink:title="index&#45;node.mts">
<path fill="#ddfeff" stroke="black" d="M406.33,-666.88C406.33,-666.88 339.17,-666.88 339.17,-666.88 336.21,-666.88 333.25,-663.92 333.25,-660.96 333.25,-660.96 333.25,-655.04 333.25,-655.04 333.25,-652.08 336.21,-649.12 339.17,-649.12 339.17,-649.12 406.33,-649.12 406.33,-649.12 409.29,-649.12 412.25,-652.08 412.25,-655.04 412.25,-655.04 412.25,-660.96 412.25,-660.96 412.25,-663.92 409.29,-666.88 406.33,-666.88"/>
<text xml:space="preserve" text-anchor="start" x="341.25" y="-654.33" font-family="Helvetica,sans-Serif" font-size="9.00">index&#45;node.mts</text>
</a>
</g>
</g>
<!-- src/cli/actions.mts&#45;&gt;src/index&#45;node.mts -->
<g id="edge1" class="edge">
<title>src/cli/actions.mts&#45;&gt;src/index&#45;node.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M242.25,-585.25C242.25,-607.55 242.25,-662.44 242.25,-662.44 242.25,-662.44 323.86,-662.44 323.86,-662.44"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="323.86,-664.54 329.86,-662.44 323.86,-660.34 323.86,-664.54"/>
</g>
<!-- src/cli/cli&#45;types.d.mts -->
<g id="node3" class="node">
<title>src/cli/cli&#45;types.d.mts</title>
<g id="a_node3"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/cli-types.d.mts" xlink:title="cli&#45;types.d.mts">
<path fill="#ccffcc" stroke="black" d="M403.71,-554.88C403.71,-554.88 341.79,-554.88 341.79,-554.88 338.83,-554.88 335.88,-551.92 335.88,-548.96 335.88,-548.96 335.88,-543.04 335.88,-543.04 335.88,-540.08 338.83,-537.12 341.79,-537.12 341.79,-537.12 403.71,-537.12 403.71,-537.12 406.67,-537.12 409.62,-540.08 409.62,-543.04 409.62,-543.04 409.62,-548.96 409.62,-548.96 409.62,-551.92 406.67,-554.88 403.71,-554.88"/>
<text xml:space="preserve" text-anchor="start" x="343.88" y="-542.33" font-family="Helvetica,sans-Serif" font-size="9.00">cli&#45;types.d.mts</text>
</a>
</g>
</g>
<!-- src/cli/actions.mts&#45;&gt;src/cli/cli&#45;types.d.mts -->
<g id="edge2" class="edge">
<title>src/cli/actions.mts&#45;&gt;src/cli/cli&#45;types.d.mts</title>
<path fill="none" stroke="#007700" stroke-opacity="0.466667" d="M273.46,-573.04C290.93,-573.04 309.25,-573.04 309.25,-573.04 309.25,-573.04 309.25,-551.33 309.25,-551.33 309.25,-551.33 327.93,-551.33 327.93,-551.33"/>
<polygon fill="none" stroke="#007700" stroke-opacity="0.466667" points="327.93,-553.43 333.93,-551.33 327.93,-549.23 327.93,-553.43"/>
</g>
<!-- src/cli/file&#45;name&#45;to&#45;stream.mts -->
<g id="node4" class="node">
<title>src/cli/file&#45;name&#45;to&#45;stream.mts</title>
<g id="a_node4"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/file-name-to-stream.mts" xlink:title="file&#45;name&#45;to&#45;stream.mts">
<path fill="#ccffcc" stroke="black" d="M422.83,-584.88C422.83,-584.88 322.67,-584.88 322.67,-584.88 319.71,-584.88 316.75,-581.92 316.75,-578.96 316.75,-578.96 316.75,-573.04 316.75,-573.04 316.75,-570.08 319.71,-567.12 322.67,-567.12 322.67,-567.12 422.83,-567.12 422.83,-567.12 425.79,-567.12 428.75,-570.08 428.75,-573.04 428.75,-573.04 428.75,-578.96 428.75,-578.96 428.75,-581.92 425.79,-584.88 422.83,-584.88"/>
<text xml:space="preserve" text-anchor="start" x="324.75" y="-572.33" font-family="Helvetica,sans-Serif" font-size="9.00">file&#45;name&#45;to&#45;stream.mts</text>
</a>
</g>
</g>
<!-- src/cli/actions.mts&#45;&gt;src/cli/file&#45;name&#45;to&#45;stream.mts -->
<g id="edge3" class="edge">
<title>src/cli/actions.mts&#45;&gt;src/cli/file&#45;name&#45;to&#45;stream.mts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M273.6,-578.96C273.6,-578.96 307.25,-578.96 307.25,-578.96"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="307.25,-581.06 313.25,-578.96 307.25,-576.86 307.25,-581.06"/>
</g>
<!-- src/version.mts -->
<g id="node7" class="node">
<title>src/version.mts</title>
<g id="a_node7"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/version.mts" xlink:title="version.mts">
<path fill="#ddfeff" stroke="black" d="M529.58,-793.88C529.58,-793.88 478.92,-793.88 478.92,-793.88 475.96,-793.88 473,-790.92 473,-787.96 473,-787.96 473,-782.04 473,-782.04 473,-779.08 475.96,-776.12 478.92,-776.12 478.92,-776.12 529.58,-776.12 529.58,-776.12 532.54,-776.12 535.5,-779.08 535.5,-782.04 535.5,-782.04 535.5,-787.96 535.5,-787.96 535.5,-790.92 532.54,-793.88 529.58,-793.88"/>
<text xml:space="preserve" text-anchor="start" x="481" y="-781.33" font-family="Helvetica,sans-Serif" font-size="9.00">version.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/version.mts -->
<g id="edge19" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/version.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M412.56,-658.06C451.27,-658.06 504.25,-658.06 504.25,-658.06 504.25,-658.06 504.25,-766.84 504.25,-766.84"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="502.15,-766.84 504.25,-772.84 506.35,-766.84 502.15,-766.84"/>
</g>
<!-- src/options.mts -->
<g id="node11" class="node">
<title>src/options.mts</title>
<g id="a_node11"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/options.mts" xlink:title="options.mts">
<path fill="#ddfeff" stroke="black" d="M1172.21,-86.88C1172.21,-86.88 1121.54,-86.88 1121.54,-86.88 1118.58,-86.88 1115.62,-83.92 1115.62,-80.96 1115.62,-80.96 1115.62,-75.04 1115.62,-75.04 1115.62,-72.08 1118.58,-69.12 1121.54,-69.12 1121.54,-69.12 1172.21,-69.12 1172.21,-69.12 1175.17,-69.12 1178.12,-72.08 1178.12,-75.04 1178.12,-75.04 1178.12,-80.96 1178.12,-80.96 1178.12,-83.92 1175.17,-86.88 1172.21,-86.88"/>
<text xml:space="preserve" text-anchor="start" x="1123.62" y="-74.33" font-family="Helvetica,sans-Serif" font-size="9.00">options.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/options.mts -->
<g id="edge15" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M332.97,-653.56C311.06,-653.56 288.25,-653.56 288.25,-653.56 288.25,-653.56 288.25,-71.46 288.25,-71.46 288.25,-71.46 1106.27,-71.46 1106.27,-71.46"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1106.27,-73.56 1112.27,-71.46 1106.27,-69.36 1106.27,-73.56"/>
</g>
<!-- src/parse/index.mts -->
<g id="node13" class="node">
<title>src/parse/index.mts</title>
<g id="a_node13"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/index.mts" xlink:title="index.mts">
<path fill="#ffccff" stroke="black" d="M525.83,-651.88C525.83,-651.88 482.67,-651.88 482.67,-651.88 479.71,-651.88 476.75,-648.92 476.75,-645.96 476.75,-645.96 476.75,-640.04 476.75,-640.04 476.75,-637.08 479.71,-634.12 482.67,-634.12 482.67,-634.12 525.83,-634.12 525.83,-634.12 528.79,-634.12 531.75,-637.08 531.75,-640.04 531.75,-640.04 531.75,-645.96 531.75,-645.96 531.75,-648.92 528.79,-651.88 525.83,-651.88"/>
<text xml:space="preserve" text-anchor="start" x="484.75" y="-639.33" font-family="Helvetica,sans-Serif" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/parse/index.mts -->
<g id="edge16" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/parse/index.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M406.25,-648.76C406.25,-645.67 406.25,-643 406.25,-643 406.25,-643 467.4,-643 467.4,-643"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="467.4,-645.1 473.4,-643 467.4,-640.9 467.4,-645.1"/>
</g>
<!-- src/render/index&#45;node.mts -->
<g id="node14" class="node">
<title>src/render/index&#45;node.mts</title>
<g id="a_node14"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/index-node.mts" xlink:title="index&#45;node.mts">
<path fill="#ccccff" stroke="black" d="M537.83,-419.88C537.83,-419.88 470.67,-419.88 470.67,-419.88 467.71,-419.88 464.75,-416.92 464.75,-413.96 464.75,-413.96 464.75,-408.04 464.75,-408.04 464.75,-405.08 467.71,-402.12 470.67,-402.12 470.67,-402.12 537.83,-402.12 537.83,-402.12 540.79,-402.12 543.75,-405.08 543.75,-408.04 543.75,-408.04 543.75,-413.96 543.75,-413.96 543.75,-416.92 540.79,-419.88 537.83,-419.88"/>
<text xml:space="preserve" text-anchor="start" x="472.75" y="-407.32" font-family="Helvetica,sans-Serif" font-size="9.00">index&#45;node.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/render/index&#45;node.mts -->
<g id="edge17" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/render/index&#45;node.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M412.55,-653.94C438.38,-653.94 467.25,-653.94 467.25,-653.94 467.25,-653.94 467.25,-429.25 467.25,-429.25"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="469.35,-429.25 467.25,-423.25 465.15,-429.25 469.35,-429.25"/>
</g>
<!-- src/transform/desugar.mts -->
<g id="node15" class="node">
<title>src/transform/desugar.mts</title>
<g id="a_node15"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/transform/desugar.mts" xlink:title="desugar.mts">
<path fill="#ddfeff" stroke="black" d="M853.33,-547.88C853.33,-547.88 798.92,-547.88 798.92,-547.88 795.96,-547.88 793,-544.92 793,-541.96 793,-541.96 793,-536.04 793,-536.04 793,-533.08 795.96,-530.12 798.92,-530.12 798.92,-530.12 853.33,-530.12 853.33,-530.12 856.29,-530.12 859.25,-533.08 859.25,-536.04 859.25,-536.04 859.25,-541.96 859.25,-541.96 859.25,-544.92 856.29,-547.88 853.33,-547.88"/>
<text xml:space="preserve" text-anchor="start" x="801" y="-535.33" font-family="Helvetica,sans-Serif" font-size="9.00">desugar.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/transform/desugar.mts -->
<g id="edge18" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/transform/desugar.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M412.69,-656C439.61,-656 470.25,-656 470.25,-656 470.25,-656 470.25,-542.5 470.25,-542.5 470.25,-542.5 783.62,-542.5 783.62,-542.5"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="783.62,-544.6 789.62,-542.5 783.62,-540.4 783.62,-544.6"/>
</g>
<!-- src/cli/attributes&#45;parser.mjs -->
<g id="node5" class="node">
<title>src/cli/attributes&#45;parser.mjs</title>
<g id="a_node5"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/attributes-parser.mjs" xlink:title="attributes&#45;parser.mjs">
<polygon fill="#ccffcc" stroke="gray" points="422.38,-524.88 323.12,-524.88 323.12,-507.12 422.38,-507.12 422.38,-524.88"/>
<text xml:space="preserve" text-anchor="start" x="331.12" y="-512.33" font-family="Helvetica,sans-Serif" font-size="9.00">attributes&#45;parser.mjs</text>
</a>
</g>
</g>
<!-- src/cli/cli.mts -->
<g id="node6" class="node">
<title>src/cli/cli.mts</title>
<g id="a_node6"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/cli.mts" xlink:title="cli.mts">
<path fill="#ccffcc" stroke="black" d="M162.08,-569.88C162.08,-569.88 119.92,-569.88 119.92,-569.88 116.96,-569.88 114,-566.92 114,-563.96 114,-563.96 114,-558.04 114,-558.04 114,-555.08 116.96,-552.12 119.92,-552.12 119.92,-552.12 162.08,-552.12 162.08,-552.12 165.04,-552.12 168,-555.08 168,-558.04 168,-558.04 168,-563.96 168,-563.96 168,-566.92 165.04,-569.88 162.08,-569.88"/>
<text xml:space="preserve" text-anchor="start" x="128.25" y="-557.33" font-family="Helvetica,sans-Serif" font-size="9.00">cli.mts</text>
</a>
</g>
</g>
<!-- src/cli/cli.mts&#45;&gt;src/cli/actions.mts -->
<g id="edge5" class="edge">
<title>src/cli/cli.mts&#45;&gt;src/cli/actions.mts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M150.25,-570.34C150.25,-574.01 150.25,-577.38 150.25,-577.38 150.25,-577.38 202.16,-577.38 202.16,-577.38"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="202.16,-579.48 208.16,-577.38 202.16,-575.28 202.16,-579.48"/>
</g>
<!-- src/cli/cli.mts&#45;&gt;src/version.mts -->
<g id="edge4" class="edge">
<title>src/cli/cli.mts&#45;&gt;src/version.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M132.25,-570.18C132.25,-612.64 132.25,-787.96 132.25,-787.96 132.25,-787.96 463.51,-787.96 463.51,-787.96"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="463.51,-790.06 469.51,-787.96 463.51,-785.86 463.51,-790.06"/>
</g>
<!-- src/cli/normalize.mts -->
<g id="node8" class="node">
<title>src/cli/normalize.mts</title>
<g id="a_node8"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/normalize.mts" xlink:title="normalize.mts">
<path fill="#ccffcc" stroke="black" d="M272.96,-524.88C272.96,-524.88 211.79,-524.88 211.79,-524.88 208.83,-524.88 205.88,-521.92 205.88,-518.96 205.88,-518.96 205.88,-513.04 205.88,-513.04 205.88,-510.08 208.83,-507.12 211.79,-507.12 211.79,-507.12 272.96,-507.12 272.96,-507.12 275.92,-507.12 278.88,-510.08 278.88,-513.04 278.88,-513.04 278.88,-518.96 278.88,-518.96 278.88,-521.92 275.92,-524.88 272.96,-524.88"/>
<text xml:space="preserve" text-anchor="start" x="213.88" y="-512.33" font-family="Helvetica,sans-Serif" font-size="9.00">normalize.mts</text>
</a>
</g>
</g>
<!-- src/cli/cli.mts&#45;&gt;src/cli/normalize.mts -->
<g id="edge6" class="edge">
<title>src/cli/cli.mts&#45;&gt;src/cli/normalize.mts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M141.25,-551.89C141.25,-538.74 141.25,-516 141.25,-516 141.25,-516 196.55,-516 196.55,-516"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="196.55,-518.1 202.55,-516 196.55,-513.9 196.55,-518.1"/>
</g>
<!-- src/cli/validations.mts -->
<g id="node9" class="node">
<title>src/cli/validations.mts</title>
<g id="a_node9"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/validations.mts" xlink:title="validations.mts">
<path fill="#ccffcc" stroke="black" d="M274.83,-554.88C274.83,-554.88 209.92,-554.88 209.92,-554.88 206.96,-554.88 204,-551.92 204,-548.96 204,-548.96 204,-543.04 204,-543.04 204,-540.08 206.96,-537.12 209.92,-537.12 209.92,-537.12 274.83,-537.12 274.83,-537.12 277.79,-537.12 280.75,-540.08 280.75,-543.04 280.75,-543.04 280.75,-548.96 280.75,-548.96 280.75,-551.92 277.79,-554.88 274.83,-554.88"/>
<text xml:space="preserve" text-anchor="start" x="212" y="-542.33" font-family="Helvetica,sans-Serif" font-size="9.00">validations.mts</text>
</a>
</g>
</g>
<!-- src/cli/cli.mts&#45;&gt;src/cli/validations.mts -->
<g id="edge7" class="edge">
<title>src/cli/cli.mts&#45;&gt;src/cli/validations.mts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M168.33,-561C186.58,-561 207.25,-561 207.25,-561 207.25,-561 207.25,-560.42 207.25,-560.42"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="209.35,-564.27 207.25,-558.27 205.15,-564.27 209.35,-564.27"/>
</g>
<!-- src/cli/normalize.mts&#45;&gt;src/cli/cli&#45;types.d.mts -->
<g id="edge11" class="edge">
<title>src/cli/normalize.mts&#45;&gt;src/cli/cli&#45;types.d.mts</title>
<path fill="none" stroke="#007700" stroke-opacity="0.466667" d="M279.27,-518.96C291.59,-518.96 302.25,-518.96 302.25,-518.96 302.25,-518.96 302.25,-540.67 302.25,-540.67 302.25,-540.67 327.92,-540.67 327.92,-540.67"/>
<polygon fill="none" stroke="#007700" stroke-opacity="0.466667" points="327.92,-542.78 333.92,-540.68 327.92,-538.58 327.92,-542.78"/>
</g>
<!-- src/cli/normalize.mts&#45;&gt;src/cli/attributes&#45;parser.mjs -->
<g id="edge10" class="edge">
<title>src/cli/normalize.mts&#45;&gt;src/cli/attributes&#45;parser.mjs</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M279.04,-513.04C279.04,-513.04 313.72,-513.04 313.72,-513.04"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="313.72,-515.14 319.72,-513.04 313.72,-510.94 313.72,-515.14"/>
</g>
<!-- src/cli/normalize.mts&#45;&gt;src/options.mts -->
<g id="edge9" class="edge">
<title>src/cli/normalize.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M242.25,-506.69C242.25,-442.69 242.25,-70.29 242.25,-70.29 242.25,-70.29 1106.18,-70.29 1106.18,-70.29"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1106.18,-72.39 1112.18,-70.29 1106.18,-68.19 1106.18,-72.39"/>
</g>
<!-- src/cli/validations.mts&#45;&gt;src/index&#45;node.mts -->
<g id="edge12" class="edge">
<title>src/cli/validations.mts&#45;&gt;src/index&#45;node.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M277.25,-555.17C277.25,-581.91 277.25,-658 277.25,-658 277.25,-658 323.78,-658 323.78,-658"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="323.78,-660.1 329.78,-658 323.78,-655.9 323.78,-660.1"/>
</g>
<!-- src/cli/validations.mts&#45;&gt;src/cli/cli&#45;types.d.mts -->
<g id="edge14" class="edge">
<title>src/cli/validations.mts&#45;&gt;src/cli/cli&#45;types.d.mts</title>
<path fill="none" stroke="#007700" stroke-opacity="0.466667" d="M281.14,-547.77C281.14,-547.77 328.19,-547.77 328.19,-547.77"/>
<polygon fill="none" stroke="#007700" stroke-opacity="0.466667" points="328.19,-549.88 334.19,-547.78 328.19,-545.68 328.19,-549.88"/>
</g>
<!-- src/cli/validations.mts&#45;&gt;src/cli/attributes&#45;parser.mjs -->
<g id="edge13" class="edge">
<title>src/cli/validations.mts&#45;&gt;src/cli/attributes&#45;parser.mjs</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M281.24,-544.23C304.37,-544.23 329.25,-544.23 329.25,-544.23 329.25,-544.23 329.25,-534.27 329.25,-534.27"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="331.35,-534.27 329.25,-528.27 327.15,-534.27 331.35,-534.27"/>
</g>
<!-- src/cli/main.mts -->
<g id="node10" class="node">
<title>src/cli/main.mts</title>
<g id="a_node10"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/main.mts" xlink:title="main.mts">
<path fill="#ccffcc" stroke="black" d="M72.08,-569.88C72.08,-569.88 29.92,-569.88 29.92,-569.88 26.96,-569.88 24,-566.92 24,-563.96 24,-563.96 24,-558.04 24,-558.04 24,-555.08 26.96,-552.12 29.92,-552.12 29.92,-552.12 72.08,-552.12 72.08,-552.12 75.04,-552.12 78,-555.08 78,-558.04 78,-558.04 78,-563.96 78,-563.96 78,-566.92 75.04,-569.88 72.08,-569.88"/>
<text xml:space="preserve" text-anchor="start" x="32.62" y="-557.33" font-family="Helvetica,sans-Serif" font-size="9.00">main.mts</text>
</a>
</g>
</g>
<!-- src/cli/main.mts&#45;&gt;src/cli/cli.mts -->
<g id="edge8" class="edge">
<title>src/cli/main.mts&#45;&gt;src/cli/cli.mts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M78.49,-561C78.49,-561 104.65,-561 104.65,-561"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="104.65,-563.1 110.65,-561 104.65,-558.9 104.65,-563.1"/>
</g>
<!-- src/counter.mts -->
<g id="node12" class="node">
<title>src/counter.mts</title>
<g id="a_node12"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/counter.mts" xlink:title="counter.mts">
<path fill="#ddfeff" stroke="black" d="M1010.33,-513.88C1010.33,-513.88 958.92,-513.88 958.92,-513.88 955.96,-513.88 953,-510.92 953,-507.96 953,-507.96 953,-502.04 953,-502.04 953,-499.08 955.96,-496.12 958.92,-496.12 958.92,-496.12 1010.33,-496.12 1010.33,-496.12 1013.29,-496.12 1016.25,-499.08 1016.25,-502.04 1016.25,-502.04 1016.25,-507.96 1016.25,-507.96 1016.25,-510.92 1013.29,-513.88 1010.33,-513.88"/>
<text xml:space="preserve" text-anchor="start" x="961" y="-501.32" font-family="Helvetica,sans-Serif" font-size="9.00">counter.mts</text>
</a>
</g>
</g>
<!-- src/parse/index.mts&#45;&gt;src/options.mts -->
<g id="edge25" class="edge">
<title>src/parse/index.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M531.88,-641.23C645.32,-641.23 1069.25,-641.23 1069.25,-641.23 1069.25,-641.23 1069.25,-83.29 1069.25,-83.29 1069.25,-83.29 1106.27,-83.29 1106.27,-83.29"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1106.27,-85.39 1112.27,-83.29 1106.27,-81.19 1106.27,-85.39"/>
</g>
<!-- src/parse/scxml/index.mjs -->
<g id="node18" class="node">
<title>src/parse/scxml/index.mjs</title>
<g id="a_node18"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/scxml/index.mjs" xlink:title="index.mjs">
<path fill="#ffccff" stroke="black" d="M847.71,-685.88C847.71,-685.88 804.54,-685.88 804.54,-685.88 801.58,-685.88 798.62,-682.92 798.62,-679.96 798.62,-679.96 798.62,-674.04 798.62,-674.04 798.62,-671.08 801.58,-668.12 804.54,-668.12 804.54,-668.12 847.71,-668.12 847.71,-668.12 850.67,-668.12 853.62,-671.08 853.62,-674.04 853.62,-674.04 853.62,-679.96 853.62,-679.96 853.62,-682.92 850.67,-685.88 847.71,-685.88"/>
<text xml:space="preserve" text-anchor="start" x="806.62" y="-673.33" font-family="Helvetica,sans-Serif" font-size="9.00">index.mjs</text>
</a>
</g>
</g>
<!-- src/parse/index.mts&#45;&gt;src/parse/scxml/index.mjs -->
<g id="edge26" class="edge">
<title>src/parse/index.mts&#45;&gt;src/parse/scxml/index.mjs</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M531.98,-644.77C610.09,-644.77 826.25,-644.77 826.25,-644.77 826.25,-644.77 826.25,-658.82 826.25,-658.82"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="824.15,-658.82 826.25,-664.82 828.35,-658.82 824.15,-658.82"/>
</g>
<!-- src/parse/smcat&#45;ast.schema.mts -->
<g id="node19" class="node">
<title>src/parse/smcat&#45;ast.schema.mts</title>
<g id="a_node19"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/smcat-ast.schema.mts" xlink:title="smcat&#45;ast.schema.mts">
<path fill="#ffccff" stroke="black" d="M704.21,-677.88C704.21,-677.88 610.04,-677.88 610.04,-677.88 607.08,-677.88 604.12,-674.92 604.12,-671.96 604.12,-671.96 604.12,-666.04 604.12,-666.04 604.12,-663.08 607.08,-660.12 610.04,-660.12 610.04,-660.12 704.21,-660.12 704.21,-660.12 707.17,-660.12 710.12,-663.08 710.12,-666.04 710.12,-666.04 710.12,-671.96 710.12,-671.96 710.12,-674.92 707.17,-677.88 704.21,-677.88"/>
<text xml:space="preserve" text-anchor="start" x="612.12" y="-665.33" font-family="Helvetica,sans-Serif" font-size="9.00">smcat&#45;ast.schema.mts</text>
</a>
</g>
</g>
<!-- src/parse/index.mts&#45;&gt;src/parse/smcat&#45;ast.schema.mts -->
<g id="edge27" class="edge">
<title>src/parse/index.mts&#45;&gt;src/parse/smcat&#45;ast.schema.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M532.22,-648.33C565.4,-648.33 616.25,-648.33 616.25,-648.33 616.25,-648.33 616.25,-650.6 616.25,-650.6"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="614.15,-650.6 616.25,-656.6 618.35,-650.6 614.15,-650.6"/>
</g>
<!-- src/parse/smcat/parse.mts -->
<g id="node20" class="node">
<title>src/parse/smcat/parse.mts</title>
<g id="a_node20"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/smcat/parse.mts" xlink:title="parse.mts">
<path fill="#ffccff" stroke="black" d="M679.08,-625.88C679.08,-625.88 635.17,-625.88 635.17,-625.88 632.21,-625.88 629.25,-622.92 629.25,-619.96 629.25,-619.96 629.25,-614.04 629.25,-614.04 629.25,-611.08 632.21,-608.12 635.17,-608.12 635.17,-608.12 679.08,-608.12 679.08,-608.12 682.04,-608.12 685,-611.08 685,-614.04 685,-614.04 685,-619.96 685,-619.96 685,-622.92 682.04,-625.88 679.08,-625.88"/>
<text xml:space="preserve" text-anchor="start" x="637.25" y="-613.33" font-family="Helvetica,sans-Serif" font-size="9.00">parse.mts</text>
</a>
</g>
</g>
<!-- src/parse/index.mts&#45;&gt;src/parse/smcat/parse.mts -->
<g id="edge28" class="edge">
<title>src/parse/index.mts&#45;&gt;src/parse/smcat/parse.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M531.96,-637.67C576.05,-637.67 657.25,-637.67 657.25,-637.67 657.25,-637.67 657.25,-635.4 657.25,-635.4"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="659.35,-635.4 657.25,-629.4 655.15,-635.4 659.35,-635.4"/>
</g>
<!-- src/transform/desugar.mts&#45;&gt;src/counter.mts -->
<g id="edge63" class="edge">
<title>src/transform/desugar.mts&#45;&gt;src/counter.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M842.25,-529.95C842.25,-518.89 842.25,-501.62 842.25,-501.62 842.25,-501.62 943.65,-501.62 943.65,-501.62"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="943.65,-503.73 949.65,-501.63 943.65,-499.53 943.65,-503.73"/>
</g>
<!-- src/state&#45;machine&#45;model.mts -->
<g id="node22" class="node">
<title>src/state&#45;machine&#45;model.mts</title>
<g id="a_node22"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/state-machine-model.mts" xlink:title="state&#45;machine&#45;model.mts">
<path fill="#ddfeff" stroke="black" d="M1200.33,-477.88C1200.33,-477.88 1093.42,-477.88 1093.42,-477.88 1090.46,-477.88 1087.5,-474.92 1087.5,-471.96 1087.5,-471.96 1087.5,-466.04 1087.5,-466.04 1087.5,-463.08 1090.46,-460.12 1093.42,-460.12 1093.42,-460.12 1200.33,-460.12 1200.33,-460.12 1203.29,-460.12 1206.25,-463.08 1206.25,-466.04 1206.25,-466.04 1206.25,-471.96 1206.25,-471.96 1206.25,-474.92 1203.29,-477.88 1200.33,-477.88"/>
<text xml:space="preserve" text-anchor="start" x="1095.5" y="-465.32" font-family="Helvetica,sans-Serif" font-size="9.00">state&#45;machine&#45;model.mts</text>
</a>
</g>
</g>
<!-- src/transform/desugar.mts&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge64" class="edge">
<title>src/transform/desugar.mts&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M820.25,-529.8C820.25,-511.18 820.25,-470.77 820.25,-470.77 820.25,-470.77 1078.32,-470.77 1078.32,-470.77"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1078.32,-472.88 1084.32,-470.78 1078.32,-468.68 1078.32,-472.88"/>
</g>
<!-- src/transform/utl.mts -->
<g id="node23" class="node">
<title>src/transform/utl.mts</title>
<g id="a_node23"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/transform/utl.mts" xlink:title="utl.mts">
<path fill="#ddfeff" stroke="black" d="M1005.71,-547.88C1005.71,-547.88 963.54,-547.88 963.54,-547.88 960.58,-547.88 957.62,-544.92 957.62,-541.96 957.62,-541.96 957.62,-536.04 957.62,-536.04 957.62,-533.08 960.58,-530.12 963.54,-530.12 963.54,-530.12 1005.71,-530.12 1005.71,-530.12 1008.67,-530.12 1011.62,-533.08 1011.62,-536.04 1011.62,-536.04 1011.62,-541.96 1011.62,-541.96 1011.62,-544.92 1008.67,-547.88 1005.71,-547.88"/>
<text xml:space="preserve" text-anchor="start" x="971.5" y="-535.33" font-family="Helvetica,sans-Serif" font-size="9.00">utl.mts</text>
</a>
</g>
</g>
<!-- src/transform/desugar.mts&#45;&gt;src/transform/utl.mts -->
<g id="edge65" class="edge">
<title>src/transform/desugar.mts&#45;&gt;src/transform/utl.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M859.74,-536.04C859.74,-536.04 948.35,-536.04 948.35,-536.04"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="948.35,-538.14 954.35,-536.04 948.35,-533.94 948.35,-538.14"/>
</g>
<!-- src/index.mts -->
<g id="node16" class="node">
<title>src/index.mts</title>
<g id="a_node16"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/index.mts" xlink:title="index.mts">
<path fill="#ddfeff" stroke="black" d="M394.33,-636.88C394.33,-636.88 351.17,-636.88 351.17,-636.88 348.21,-636.88 345.25,-633.92 345.25,-630.96 345.25,-630.96 345.25,-625.04 345.25,-625.04 345.25,-622.08 348.21,-619.12 351.17,-619.12 351.17,-619.12 394.33,-619.12 394.33,-619.12 397.29,-619.12 400.25,-622.08 400.25,-625.04 400.25,-625.04 400.25,-630.96 400.25,-630.96 400.25,-633.92 397.29,-636.88 394.33,-636.88"/>
<text xml:space="preserve" text-anchor="start" x="353.25" y="-624.33" font-family="Helvetica,sans-Serif" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/index.mts&#45;&gt;src/version.mts -->
<g id="edge24" class="edge">
<title>src/index.mts&#45;&gt;src/version.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M400.56,-632.06C423.48,-632.06 452.25,-632.06 452.25,-632.06 452.25,-632.06 452.25,-782.04 452.25,-782.04 452.25,-782.04 463.48,-782.04 463.48,-782.04"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="463.48,-784.14 469.48,-782.04 463.48,-779.94 463.48,-784.14"/>
</g>
<!-- src/index.mts&#45;&gt;src/options.mts -->
<g id="edge20" class="edge">
<title>src/index.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M344.77,-628C322.57,-628 295.25,-628 295.25,-628 295.25,-628 295.25,-72.62 295.25,-72.62 295.25,-72.62 1106.27,-72.62 1106.27,-72.62"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1106.27,-74.73 1112.27,-72.63 1106.27,-70.53 1106.27,-74.73"/>
</g>
<!-- src/index.mts&#45;&gt;src/parse/index.mts -->
<g id="edge21" class="edge">
<title>src/index.mts&#45;&gt;src/parse/index.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M400.64,-630C439.24,-630 504.25,-630 504.25,-630 504.25,-630 504.25,-630.38 504.25,-630.38"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="502.15,-624.8 504.25,-630.8 506.35,-624.8 502.15,-624.8"/>
</g>
<!-- src/index.mts&#45;&gt;src/transform/desugar.mts -->
<g id="edge23" class="edge">
<title>src/index.mts&#45;&gt;src/transform/desugar.mts</title>
<path fill="none" stroke="#000000" stroke-opacity="0.200000" d="M372.25,-618.72C372.25,-609.43 372.25,-596.5 372.25,-596.5 372.25,-596.5 826.25,-596.5 826.25,-596.5 826.25,-596.5 826.25,-555.75 826.25,-555.75"/>
<polygon fill="none" stroke="#000000" stroke-opacity="0.200000" points="828.35,-555.75 826.25,-549.75 824.15,-555.75 828.35,-555.75"/>
</g>
<!-- src/render/index.mts -->
<g id="node17" class="node">
<title>src/render/index.mts</title>
<g id="a_node17"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/index.mts" xlink:title="index.mts">
<path fill="#ccccff" stroke="black" d="M525.83,-284.88C525.83,-284.88 482.67,-284.88 482.67,-284.88 479.71,-284.88 476.75,-281.92 476.75,-278.96 476.75,-278.96 476.75,-273.04 476.75,-273.04 476.75,-270.08 479.71,-267.12 482.67,-267.12 482.67,-267.12 525.83,-267.12 525.83,-267.12 528.79,-267.12 531.75,-270.08 531.75,-273.04 531.75,-273.04 531.75,-278.96 531.75,-278.96 531.75,-281.92 528.79,-284.88 525.83,-284.88"/>
<text xml:space="preserve" text-anchor="start" x="484.75" y="-272.32" font-family="Helvetica,sans-Serif" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/index.mts&#45;&gt;src/render/index.mts -->
<g id="edge22" class="edge">
<title>src/index.mts&#45;&gt;src/render/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M400.59,-627.94C419.19,-627.94 440.25,-627.94 440.25,-627.94 440.25,-627.94 440.25,-276 440.25,-276 440.25,-276 467.34,-276 467.34,-276"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="467.34,-278.1 473.34,-276 467.34,-273.9 467.34,-278.1"/>
</g>
<!-- src/render/dot/index.mts -->
<g id="node29" class="node">
<title>src/render/dot/index.mts</title>
<g id="a_node29"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/index.mts" xlink:title="index.mts">
<path fill="#ccccff" stroke="black" d="M847.71,-183.88C847.71,-183.88 804.54,-183.88 804.54,-183.88 801.58,-183.88 798.62,-180.92 798.62,-177.96 798.62,-177.96 798.62,-172.04 798.62,-172.04 798.62,-169.08 801.58,-166.12 804.54,-166.12 804.54,-166.12 847.71,-166.12 847.71,-166.12 850.67,-166.12 853.62,-169.08 853.62,-172.04 853.62,-172.04 853.62,-177.96 853.62,-177.96 853.62,-180.92 850.67,-183.88 847.71,-183.88"/>
<text xml:space="preserve" text-anchor="start" x="806.62" y="-171.32" font-family="Helvetica,sans-Serif" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/dot/index.mts -->
<g id="edge46" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/dot/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M504.25,-266.64C504.25,-240.84 504.25,-170.56 504.25,-170.56 504.25,-170.56 789.38,-170.56 789.38,-170.56"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="789.38,-172.66 795.38,-170.56 789.38,-168.46 789.38,-172.66"/>
</g>
<!-- src/render/scjson/index.mts -->
<g id="node31" class="node">
<title>src/render/scjson/index.mts</title>
<g id="a_node31"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scjson/index.mts" xlink:title="index.mts">
<path fill="#ccccff" stroke="black" d="M847.71,-359.88C847.71,-359.88 804.54,-359.88 804.54,-359.88 801.58,-359.88 798.62,-356.92 798.62,-353.96 798.62,-353.96 798.62,-348.04 798.62,-348.04 798.62,-345.08 801.58,-342.12 804.54,-342.12 804.54,-342.12 847.71,-342.12 847.71,-342.12 850.67,-342.12 853.62,-345.08 853.62,-348.04 853.62,-348.04 853.62,-353.96 853.62,-353.96 853.62,-356.92 850.67,-359.88 847.71,-359.88"/>
<text xml:space="preserve" text-anchor="start" x="806.62" y="-347.32" font-family="Helvetica,sans-Serif" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/scjson/index.mts -->
<g id="edge47" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/scjson/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M532.03,-277.54C608.63,-277.54 817.25,-277.54 817.25,-277.54 817.25,-277.54 817.25,-332.67 817.25,-332.67"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="815.15,-332.67 817.25,-338.67 819.35,-332.67 815.15,-332.67"/>
</g>
<!-- src/render/scxml/index.mts -->
<g id="node32" class="node">
<title>src/render/scxml/index.mts</title>
<g id="a_node32"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scxml/index.mts" xlink:title="index.mts">
<path fill="#ccccff" stroke="black" d="M678.71,-93.88C678.71,-93.88 635.54,-93.88 635.54,-93.88 632.58,-93.88 629.62,-90.92 629.62,-87.96 629.62,-87.96 629.62,-82.04 629.62,-82.04 629.62,-79.08 632.58,-76.12 635.54,-76.12 635.54,-76.12 678.71,-76.12 678.71,-76.12 681.67,-76.12 684.62,-79.08 684.62,-82.04 684.62,-82.04 684.62,-87.96 684.62,-87.96 684.62,-90.92 681.67,-93.88 678.71,-93.88"/>
<text xml:space="preserve" text-anchor="start" x="637.62" y="-81.33" font-family="Helvetica,sans-Serif" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/scxml/index.mts -->
<g id="edge48" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/scxml/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M490.25,-266.79C490.25,-228.63 490.25,-85 490.25,-85 490.25,-85 620.17,-85 620.17,-85"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="620.17,-87.1 626.17,-85 620.17,-82.9 620.17,-87.1"/>
</g>
<!-- src/render/smcat.mts -->
<g id="node33" class="node">
<title>src/render/smcat.mts</title>
<g id="a_node33"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/smcat.mts" xlink:title="smcat.mts">
<path fill="#ccccff" stroke="black" d="M679.46,-325.88C679.46,-325.88 634.79,-325.88 634.79,-325.88 631.83,-325.88 628.88,-322.92 628.88,-319.96 628.88,-319.96 628.88,-314.04 628.88,-314.04 628.88,-311.08 631.83,-308.12 634.79,-308.12 634.79,-308.12 679.46,-308.12 679.46,-308.12 682.42,-308.12 685.38,-311.08 685.38,-314.04 685.38,-314.04 685.38,-319.96 685.38,-319.96 685.38,-322.92 682.42,-325.88 679.46,-325.88"/>
<text xml:space="preserve" text-anchor="start" x="636.88" y="-313.32" font-family="Helvetica,sans-Serif" font-size="9.00">smcat.mts</text>
</a>
</g>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/smcat.mts -->
<g id="edge49" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/smcat.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M531.96,-281.21C576.05,-281.21 657.25,-281.21 657.25,-281.21 657.25,-281.21 657.25,-298.94 657.25,-298.94"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="655.15,-298.94 657.25,-304.94 659.35,-298.94 655.15,-298.94"/>
</g>
<!-- src/render/vector/vector&#45;with&#45;wasm.mts -->
<g id="node34" class="node">
<title>src/render/vector/vector&#45;with&#45;wasm.mts</title>
<g id="a_node34"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/vector/vector-with-wasm.mts" xlink:title="vector&#45;with&#45;wasm.mts">
<path fill="#ccccff" stroke="black" d="M703.08,-243.88C703.08,-243.88 611.17,-243.88 611.17,-243.88 608.21,-243.88 605.25,-240.92 605.25,-237.96 605.25,-237.96 605.25,-232.04 605.25,-232.04 605.25,-229.08 608.21,-226.12 611.17,-226.12 611.17,-226.12 703.08,-226.12 703.08,-226.12 706.04,-226.12 709,-229.08 709,-232.04 709,-232.04 709,-237.96 709,-237.96 709,-240.92 706.04,-243.88 703.08,-243.88"/>
<text xml:space="preserve" text-anchor="start" x="613.25" y="-231.32" font-family="Helvetica,sans-Serif" font-size="9.00">vector&#45;with&#45;wasm.mts</text>
</a>
</g>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/vector/vector&#45;with&#45;wasm.mts -->
<g id="edge50" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/vector/vector&#45;with&#45;wasm.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M518.25,-266.9C518.25,-254.82 518.25,-235 518.25,-235 518.25,-235 595.99,-235 595.99,-235"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="595.99,-237.1 601.99,-235 595.99,-232.9 595.99,-237.1"/>
</g>
<!-- src/parse/scxml/index.mjs&#45;&gt;src/counter.mts -->
<g id="edge30" class="edge">
<title>src/parse/scxml/index.mjs&#45;&gt;src/counter.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M854.04,-671.67C875.76,-671.67 902.25,-671.67 902.25,-671.67 902.25,-671.67 902.25,-504.38 902.25,-504.38 902.25,-504.38 943.51,-504.38 943.51,-504.38"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="943.51,-506.48 949.51,-504.38 943.51,-502.28 943.51,-506.48"/>
</g>
<!-- src/parse/parser&#45;helpers.mts -->
<g id="node21" class="node">
<title>src/parse/parser&#45;helpers.mts</title>
<g id="a_node21"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/parser-helpers.mts" xlink:title="parser&#45;helpers.mts">
<path fill="#ffccff" stroke="black" d="M1024.96,-625.88C1024.96,-625.88 944.29,-625.88 944.29,-625.88 941.33,-625.88 938.38,-622.92 938.38,-619.96 938.38,-619.96 938.38,-614.04 938.38,-614.04 938.38,-611.08 941.33,-608.12 944.29,-608.12 944.29,-608.12 1024.96,-608.12 1024.96,-608.12 1027.92,-608.12 1030.88,-611.08 1030.88,-614.04 1030.88,-614.04 1030.88,-619.96 1030.88,-619.96 1030.88,-622.92 1027.92,-625.88 1024.96,-625.88"/>
<text xml:space="preserve" text-anchor="start" x="946.38" y="-613.33" font-family="Helvetica,sans-Serif" font-size="9.00">parser&#45;helpers.mts</text>
</a>
</g>
</g>
<!-- src/parse/scxml/index.mjs&#45;&gt;src/parse/parser&#45;helpers.mts -->
<g id="edge32" class="edge">
<title>src/parse/scxml/index.mjs&#45;&gt;src/parse/parser&#45;helpers.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M853.85,-678.77C879.03,-678.77 912.25,-678.77 912.25,-678.77 912.25,-678.77 912.25,-619.96 912.25,-619.96 912.25,-619.96 928.94,-619.96 928.94,-619.96"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="928.94,-622.06 934.94,-619.96 928.94,-617.86 928.94,-622.06"/>
</g>
<!-- src/parse/scxml/index.mjs&#45;&gt;src/transform/utl.mts -->
<g id="edge31" class="edge">
<title>src/parse/scxml/index.mjs&#45;&gt;src/transform/utl.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M854.04,-675.23C877.51,-675.23 907.25,-675.23 907.25,-675.23 907.25,-675.23 907.25,-541.96 907.25,-541.96 907.25,-541.96 948.1,-541.96 948.1,-541.96"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="948.1,-544.06 954.1,-541.96 948.1,-539.86 948.1,-544.06"/>
</g>
<!-- src/parse/scxml/normalize&#45;machine.mts -->
<g id="node24" class="node">
<title>src/parse/scxml/normalize&#45;machine.mts</title>
<g id="a_node24"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/scxml/normalize-machine.mts" xlink:title="normalize&#45;machine.mts">
<path fill="#ffccff" stroke="black" d="M1034.33,-685.88C1034.33,-685.88 934.92,-685.88 934.92,-685.88 931.96,-685.88 929,-682.92 929,-679.96 929,-679.96 929,-674.04 929,-674.04 929,-671.08 931.96,-668.12 934.92,-668.12 934.92,-668.12 1034.33,-668.12 1034.33,-668.12 1037.29,-668.12 1040.25,-671.08 1040.25,-674.04 1040.25,-674.04 1040.25,-679.96 1040.25,-679.96 1040.25,-682.92 1037.29,-685.88 1034.33,-685.88"/>
<text xml:space="preserve" text-anchor="start" x="937" y="-673.33" font-family="Helvetica,sans-Serif" font-size="9.00">normalize&#45;machine.mts</text>
</a>
</g>
</g>
<!-- src/parse/scxml/index.mjs&#45;&gt;src/parse/scxml/normalize&#45;machine.mts -->
<g id="edge33" class="edge">
<title>src/parse/scxml/index.mjs&#45;&gt;src/parse/scxml/normalize&#45;machine.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M854.1,-682.33C854.1,-682.33 919.68,-682.33 919.68,-682.33"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="919.68,-684.43 925.68,-682.33 919.68,-680.23 919.68,-684.43"/>
</g>
<!-- src/parse/scxml/utl.mts -->
<g id="node25" class="node">
<title>src/parse/scxml/utl.mts</title>
<g id="a_node25"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/scxml/utl.mts" xlink:title="utl.mts">
<path fill="#ffccff" stroke="black" d="M1167.96,-715.88C1167.96,-715.88 1125.79,-715.88 1125.79,-715.88 1122.83,-715.88 1119.88,-712.92 1119.88,-709.96 1119.88,-709.96 1119.88,-704.04 1119.88,-704.04 1119.88,-701.08 1122.83,-698.12 1125.79,-698.12 1125.79,-698.12 1167.96,-698.12 1167.96,-698.12 1170.92,-698.12 1173.88,-701.08 1173.88,-704.04 1173.88,-704.04 1173.88,-709.96 1173.88,-709.96 1173.88,-712.92 1170.92,-715.88 1167.96,-715.88"/>
<text xml:space="preserve" text-anchor="start" x="1133.75" y="-703.33" font-family="Helvetica,sans-Serif" font-size="9.00">utl.mts</text>
</a>
</g>
</g>
<!-- src/parse/scxml/index.mjs&#45;&gt;src/parse/scxml/utl.mts -->
<g id="edge34" class="edge">
<title>src/parse/scxml/index.mjs&#45;&gt;src/parse/scxml/utl.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M826.25,-686.36C826.25,-696.1 826.25,-709.96 826.25,-709.96 826.25,-709.96 1110.51,-709.96 1110.51,-709.96"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1110.51,-712.06 1116.51,-709.96 1110.51,-707.86 1110.51,-712.06"/>
</g>
<!-- src/parse/smcat/parse.mts&#45;&gt;src/counter.mts -->
<g id="edge37" class="edge">
<title>src/parse/smcat/parse.mts&#45;&gt;src/counter.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M657.25,-607.73C657.25,-579.88 657.25,-498.88 657.25,-498.88 657.25,-498.88 943.61,-498.88 943.61,-498.88"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="943.61,-500.98 949.61,-498.88 943.61,-496.78 943.61,-500.98"/>
</g>
<!-- src/parse/smcat/smcat&#45;parser.mjs -->
<g id="node27" class="node">
<title>src/parse/smcat/smcat&#45;parser.mjs</title>
<g id="a_node27"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/smcat/smcat-parser.mjs" xlink:title="smcat&#45;parser.mjs">
<polygon fill="#ffccff" stroke="gray" points="869,-625.88 783.25,-625.88 783.25,-608.12 869,-608.12 869,-625.88"/>
<text xml:space="preserve" text-anchor="start" x="791.25" y="-613.33" font-family="Helvetica,sans-Serif" font-size="9.00">smcat&#45;parser.mjs</text>
</a>
</g>
</g>
<!-- src/parse/smcat/parse.mts&#45;&gt;src/parse/smcat/smcat&#45;parser.mjs -->
<g id="edge38" class="edge">
<title>src/parse/smcat/parse.mts&#45;&gt;src/parse/smcat/smcat&#45;parser.mjs</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M685.41,-617C685.41,-617 773.79,-617 773.79,-617"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="773.79,-619.1 779.79,-617 773.79,-614.9 773.79,-619.1"/>
</g>
<!-- src/parse/parser&#45;helpers.mts&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge29" class="edge">
<title>src/parse/parser&#45;helpers.mts&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1023.25,-607.64C1023.25,-575.9 1023.25,-474.32 1023.25,-474.32 1023.25,-474.32 1078.21,-474.32 1078.21,-474.32"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1078.21,-476.43 1084.21,-474.33 1078.21,-472.23 1078.21,-476.43"/>
</g>
<!-- src/parse/scxml/normalize&#45;machine.mts&#45;&gt;src/parse/scxml/utl.mts -->
<g id="edge36" class="edge">
<title>src/parse/scxml/normalize&#45;machine.mts&#45;&gt;src/parse/scxml/utl.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M984.25,-686.16C984.25,-694 984.25,-704.04 984.25,-704.04 984.25,-704.04 1110.63,-704.04 1110.63,-704.04"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="1110.63,-706.14 1116.63,-704.04 1110.63,-701.94 1110.63,-706.14"/>
</g>
<!-- src/parse/scxml/scxml.d.ts -->
<g id="node26" class="node">
<title>src/parse/scxml/scxml.d.ts</title>
<g id="a_node26"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/scxml/scxml.d.ts" xlink:title="scxml.d.ts">
<path fill="#ffccff" stroke="none" d="M1168.83,-685.88C1168.83,-685.88 1124.92,-685.88 1124.92,-685.88 1121.96,-685.88 1119,-682.92 1119,-679.96 1119,-679.96 1119,-674.04 1119,-674.04 1119,-671.08 1121.96,-668.12 1124.92,-668.12 1124.92,-668.12 1168.83,-668.12 1168.83,-668.12 1171.79,-668.12 1174.75,-671.08 1174.75,-674.04 1174.75,-674.04 1174.75,-679.96 1174.75,-679.96 1174.75,-682.92 1171.79,-685.88 1168.83,-685.88"/>
<text xml:space="preserve" text-anchor="start" x="1127" y="-673.33" font-family="Helvetica,sans-Serif" font-size="9.00">scxml.d.ts</text>
</a>
</g>
</g>
<!-- src/parse/scxml/normalize&#45;machine.mts&#45;&gt;src/parse/scxml/scxml.d.ts -->
<g id="edge35" class="edge">
<title>src/parse/scxml/normalize&#45;machine.mts&#45;&gt;src/parse/scxml/scxml.d.ts</title>
<path fill="none" stroke="#ff00ff" stroke-opacity="0.466667" d="M1040.46,-677C1040.46,-677 1111.24,-677 1111.24,-677"/>
<polygon fill="none" stroke="#ff00ff" stroke-opacity="0.466667" points="1111.24,-679.1 1117.24,-677 1111.24,-674.9 1111.24,-679.1"/>
</g>
<!-- src/parse/smcat/smcat&#45;parser.mjs&#45;&gt;src/parse/parser&#45;helpers.mts -->
<g id="edge39" class="edge">
<title>src/parse/smcat/smcat&#45;parser.mjs&#45;&gt;src/parse/parser&#45;helpers.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M869.44,-614.04C869.44,-614.04 929.01,-614.04 929.01,-614.04"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="929.01,-616.14 935.01,-614.04 929.01,-611.94 929.01,-616.14"/>
</g>
<!-- src/render/dot/attributebuilder.mts -->
<g id="node28" class="node">
<title>src/render/dot/attributebuilder.mts</title>
<g id="a_node28"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/attributebuilder.mts" xlink:title="attributebuilder.mts">
<path fill="#ccccff" stroke="black" d="M1025.71,-153.88C1025.71,-153.88 943.54,-153.88 943.54,-153.88 940.58,-153.88 937.62,-150.92 937.62,-147.96 937.62,-147.96 937.62,-142.04 937.62,-142.04 937.62,-139.08 940.58,-136.12 943.54,-136.12 943.54,-136.12 1025.71,-136.12 1025.71,-136.12 1028.67,-136.12 1031.62,-139.08 1031.62,-142.04 1031.62,-142.04 1031.62,-147.96 1031.62,-147.96 1031.62,-150.92 1028.67,-153.88 1025.71,-153.88"/>
<text xml:space="preserve" text-anchor="start" x="945.62" y="-141.32" font-family="Helvetica,sans-Serif" font-size="9.00">attributebuilder.mts</text>
</a>
</g>
</g>
<!-- src/render/dot/index.mts&#45;&gt;src/options.mts -->
<g id="edge40" class="edge">
<title>src/render/dot/index.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M853.78,-169.68C871.9,-169.68 892.25,-169.68 892.25,-169.68 892.25,-169.68 892.25,-79.71 892.25,-79.71 892.25,-79.71 1106.11,-79.71 1106.11,-79.71"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1106.11,-81.81 1112.11,-79.71 1106.11,-77.61 1106.11,-81.81"/>
</g>
<!-- src/render/dot/index.mts&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge41" class="edge">
<title>src/render/dot/index.mts&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M853.83,-180.32C870,-180.32 887.25,-180.32 887.25,-180.32 887.25,-180.32 887.25,-463.68 887.25,-463.68 887.25,-463.68 1078.28,-463.68 1078.28,-463.68"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1078.28,-465.78 1084.28,-463.68 1078.28,-461.58 1078.28,-465.78"/>
</g>
<!-- src/render/dot/index.mts&#45;&gt;src/render/dot/attributebuilder.mts -->
<g id="edge42" class="edge">
<title>src/render/dot/index.mts&#45;&gt;src/render/dot/attributebuilder.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M853.99,-173.22C889.47,-173.22 946.25,-173.22 946.25,-173.22 946.25,-173.22 946.25,-163.27 946.25,-163.27"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="948.35,-163.27 946.25,-157.27 944.15,-163.27 948.35,-163.27"/>
</g>
<!-- src/render/dot/utl.mts -->
<g id="node30" class="node">
<title>src/render/dot/utl.mts</title>
<g id="a_node30"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/utl.mts" xlink:title="utl.mts">
<path fill="#ccccff" stroke="black" d="M1005.71,-183.88C1005.71,-183.88 963.54,-183.88 963.54,-183.88 960.58,-183.88 957.62,-180.92 957.62,-177.96 957.62,-177.96 957.62,-172.04 957.62,-172.04 957.62,-169.08 960.58,-166.12 963.54,-166.12 963.54,-166.12 1005.71,-166.12 1005.71,-166.12 1008.67,-166.12 1011.62,-169.08 1011.62,-172.04 1011.62,-172.04 1011.62,-177.96 1011.62,-177.96 1011.62,-180.92 1008.67,-183.88 1005.71,-183.88"/>
<text xml:space="preserve" text-anchor="start" x="971.5" y="-171.32" font-family="Helvetica,sans-Serif" font-size="9.00">utl.mts</text>
</a>
</g>
</g>
<!-- src/render/dot/index.mts&#45;&gt;src/render/dot/utl.mts -->
<g id="edge43" class="edge">
<title>src/render/dot/index.mts&#45;&gt;src/render/dot/utl.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M854.1,-176.78C854.1,-176.78 948.17,-176.78 948.17,-176.78"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="948.17,-178.88 954.17,-176.78 948.17,-174.68 948.17,-178.88"/>
</g>
<!-- src/render/dot/utl.mts&#45;&gt;src/options.mts -->
<g id="edge44" class="edge">
<title>src/render/dot/utl.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1011.84,-172.04C1058.14,-172.04 1147.25,-172.04 1147.25,-172.04 1147.25,-172.04 1147.25,-96.39 1147.25,-96.39"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1149.35,-96.39 1147.25,-90.39 1145.15,-96.39 1149.35,-96.39"/>
</g>
<!-- src/render/dot/utl.mts&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge45" class="edge">
<title>src/render/dot/utl.mts&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-opacity="0.200000" d="M1011.97,-177.96C1046.44,-177.96 1101.25,-177.96 1101.25,-177.96 1101.25,-177.96 1101.25,-452.13 1101.25,-452.13"/>
<polygon fill="none" stroke="#000000" stroke-opacity="0.200000" points="1099.15,-452.13 1101.25,-458.13 1103.35,-452.13 1099.15,-452.13"/>
</g>
<!-- src/render/scjson/index.mts&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge51" class="edge">
<title>src/render/scjson/index.mts&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M809.25,-360.12C809.25,-387.52 809.25,-467.23 809.25,-467.23 809.25,-467.23 1078.26,-467.23 1078.26,-467.23"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1078.26,-469.33 1084.26,-467.23 1078.26,-465.13 1078.26,-469.33"/>
</g>
<!-- src/render/scjson/make&#45;valid&#45;event&#45;names.mts -->
<g id="node35" class="node">
<title>src/render/scjson/make&#45;valid&#45;event&#45;names.mts</title>
<g id="a_node35"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scjson/make-valid-event-names.mts" xlink:title="make&#45;valid&#45;event&#45;names.mts">
<path fill="#ccccff" stroke="black" d="M1045.58,-363.88C1045.58,-363.88 923.67,-363.88 923.67,-363.88 920.71,-363.88 917.75,-360.92 917.75,-357.96 917.75,-357.96 917.75,-352.04 917.75,-352.04 917.75,-349.08 920.71,-346.12 923.67,-346.12 923.67,-346.12 1045.58,-346.12 1045.58,-346.12 1048.54,-346.12 1051.5,-349.08 1051.5,-352.04 1051.5,-352.04 1051.5,-357.96 1051.5,-357.96 1051.5,-360.92 1048.54,-363.88 1045.58,-363.88"/>
<text xml:space="preserve" text-anchor="start" x="925.75" y="-351.32" font-family="Helvetica,sans-Serif" font-size="9.00">make&#45;valid&#45;event&#45;names.mts</text>
</a>
</g>
</g>
<!-- src/render/scjson/index.mts&#45;&gt;src/render/scjson/make&#45;valid&#45;event&#45;names.mts -->
<g id="edge52" class="edge">
<title>src/render/scjson/index.mts&#45;&gt;src/render/scjson/make&#45;valid&#45;event&#45;names.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M854.1,-353C854.1,-353 908.39,-353 908.39,-353"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="908.39,-355.1 914.39,-353 908.39,-350.9 908.39,-355.1"/>
</g>
<!-- src/render/scjson/make&#45;valid&#45;xml&#45;name.mts -->
<g id="node36" class="node">
<title>src/render/scjson/make&#45;valid&#45;xml&#45;name.mts</title>
<g id="a_node36"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scjson/make-valid-xml-name.mts" xlink:title="make&#45;valid&#45;xml&#45;name.mts">
<path fill="#ccccff" stroke="black" d="M1039.21,-393.88C1039.21,-393.88 930.04,-393.88 930.04,-393.88 927.08,-393.88 924.12,-390.92 924.12,-387.96 924.12,-387.96 924.12,-382.04 924.12,-382.04 924.12,-379.08 927.08,-376.12 930.04,-376.12 930.04,-376.12 1039.21,-376.12 1039.21,-376.12 1042.17,-376.12 1045.12,-379.08 1045.12,-382.04 1045.12,-382.04 1045.12,-387.96 1045.12,-387.96 1045.12,-390.92 1042.17,-393.88 1039.21,-393.88"/>
<text xml:space="preserve" text-anchor="start" x="932.12" y="-381.32" font-family="Helvetica,sans-Serif" font-size="9.00">make&#45;valid&#45;xml&#45;name.mts</text>
</a>
</g>
</g>
<!-- src/render/scjson/index.mts&#45;&gt;src/render/scjson/make&#45;valid&#45;xml&#45;name.mts -->
<g id="edge53" class="edge">
<title>src/render/scjson/index.mts&#45;&gt;src/render/scjson/make&#45;valid&#45;xml&#45;name.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M831.25,-360.29C831.25,-370.36 831.25,-385 831.25,-385 831.25,-385 914.98,-385 914.98,-385"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="914.98,-387.1 920.98,-385 914.98,-382.9 914.98,-387.1"/>
</g>
<!-- src/render/scjson/scjson.d.ts -->
<g id="node37" class="node">
<title>src/render/scjson/scjson.d.ts</title>
<g id="a_node37"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scjson/scjson.d.ts" xlink:title="scjson.d.ts">
<path fill="#ccccff" stroke="none" d="M1008.08,-333.88C1008.08,-333.88 961.17,-333.88 961.17,-333.88 958.21,-333.88 955.25,-330.92 955.25,-327.96 955.25,-327.96 955.25,-322.04 955.25,-322.04 955.25,-319.08 958.21,-316.12 961.17,-316.12 961.17,-316.12 1008.08,-316.12 1008.08,-316.12 1011.04,-316.12 1014,-319.08 1014,-322.04 1014,-322.04 1014,-327.96 1014,-327.96 1014,-330.92 1011.04,-333.88 1008.08,-333.88"/>
<text xml:space="preserve" text-anchor="start" x="963.25" y="-321.32" font-family="Helvetica,sans-Serif" font-size="9.00">scjson.d.ts</text>
</a>
</g>
</g>
<!-- src/render/scjson/index.mts&#45;&gt;src/render/scjson/scjson.d.ts -->
<g id="edge54" class="edge">
<title>src/render/scjson/index.mts&#45;&gt;src/render/scjson/scjson.d.ts</title>
<path fill="none" stroke="#0000ff" stroke-opacity="0.466667" d="M835.25,-341.92C835.25,-336.19 835.25,-329.88 835.25,-329.88 835.25,-329.88 947.24,-329.88 947.24,-329.88"/>
<polygon fill="none" stroke="#0000ff" stroke-opacity="0.466667" points="947.24,-331.98 953.24,-329.88 947.24,-327.78 947.24,-331.98"/>
</g>
<!-- src/render/scxml/index.mts&#45;&gt;src/render/scjson/index.mts -->
<g id="edge55" class="edge">
<title>src/render/scxml/index.mts&#45;&gt;src/render/scjson/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M684.89,-87.96C712.97,-87.96 752.25,-87.96 752.25,-87.96 752.25,-87.96 752.25,-351 752.25,-351 752.25,-351 789.17,-351 789.17,-351"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="789.17,-353.1 795.17,-351 789.17,-348.9 789.17,-353.1"/>
</g>
<!-- src/render/scxml/render&#45;from&#45;scjson.mts -->
<g id="node38" class="node">
<title>src/render/scxml/render&#45;from&#45;scjson.mts</title>
<g id="a_node38"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scxml/render-from-scjson.mts" xlink:title="render&#45;from&#45;scjson.mts">
<path fill="#ccccff" stroke="black" d="M875.08,-93.88C875.08,-93.88 777.17,-93.88 777.17,-93.88 774.21,-93.88 771.25,-90.92 771.25,-87.96 771.25,-87.96 771.25,-82.04 771.25,-82.04 771.25,-79.08 774.21,-76.12 777.17,-76.12 777.17,-76.12 875.08,-76.12 875.08,-76.12 878.04,-76.12 881,-79.08 881,-82.04 881,-82.04 881,-87.96 881,-87.96 881,-90.92 878.04,-93.88 875.08,-93.88"/>
<text xml:space="preserve" text-anchor="start" x="779.25" y="-81.33" font-family="Helvetica,sans-Serif" font-size="9.00">render&#45;from&#45;scjson.mts</text>
</a>
</g>
</g>
<!-- src/render/scxml/index.mts&#45;&gt;src/render/scxml/render&#45;from&#45;scjson.mts -->
<g id="edge56" class="edge">
<title>src/render/scxml/index.mts&#45;&gt;src/render/scxml/render&#45;from&#45;scjson.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M685.03,-82.04C685.03,-82.04 761.79,-82.04 761.79,-82.04"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="761.79,-84.14 767.79,-82.04 761.79,-79.94 761.79,-84.14"/>
</g>
<!-- src/render/vector/vector&#45;with&#45;wasm.mts&#45;&gt;src/options.mts -->
<g id="edge61" class="edge">
<title>src/render/vector/vector&#45;with&#45;wasm.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M692.25,-225.87C692.25,-191.77 692.25,-73.79 692.25,-73.79 692.25,-73.79 1106.24,-73.79 1106.24,-73.79"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1106.24,-75.89 1112.24,-73.79 1106.24,-71.69 1106.24,-75.89"/>
</g>
<!-- src/render/vector/vector&#45;with&#45;wasm.mts&#45;&gt;src/render/dot/index.mts -->
<g id="edge62" class="edge">
<title>src/render/vector/vector&#45;with&#45;wasm.mts&#45;&gt;src/render/dot/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M701.25,-225.62C701.25,-208.75 701.25,-175 701.25,-175 701.25,-175 789.38,-175 789.38,-175"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="789.38,-177.1 795.38,-175 789.38,-172.9 789.38,-177.1"/>
</g>
<!-- src/render/scxml/render&#45;from&#45;scjson.mts&#45;&gt;src/render/scjson/scjson.d.ts -->
<g id="edge57" class="edge">
<title>src/render/scxml/render&#45;from&#45;scjson.mts&#45;&gt;src/render/scjson/scjson.d.ts</title>
<path fill="none" stroke="#0000ff" stroke-opacity="0.466667" d="M881.47,-90.38C890.65,-90.38 897.25,-90.38 897.25,-90.38 897.25,-90.38 897.25,-321 897.25,-321 897.25,-321 947.53,-321 947.53,-321"/>
<polygon fill="none" stroke="#0000ff" stroke-opacity="0.466667" points="947.53,-323.1 953.53,-321 947.53,-318.9 947.53,-323.1"/>
</g>
<!-- src/render/vector/dot&#45;to&#45;vector&#45;native.mts -->
<g id="node39" class="node">
<title>src/render/vector/dot&#45;to&#45;vector&#45;native.mts</title>
<g id="a_node39"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/vector/dot-to-vector-native.mts" xlink:title="dot&#45;to&#45;vector&#45;native.mts">
<path fill="#ccccff" stroke="black" d="M875.83,-273.88C875.83,-273.88 776.42,-273.88 776.42,-273.88 773.46,-273.88 770.5,-270.92 770.5,-267.96 770.5,-267.96 770.5,-262.04 770.5,-262.04 770.5,-259.08 773.46,-256.12 776.42,-256.12 776.42,-256.12 875.83,-256.12 875.83,-256.12 878.79,-256.12 881.75,-259.08 881.75,-262.04 881.75,-262.04 881.75,-267.96 881.75,-267.96 881.75,-270.92 878.79,-273.88 875.83,-273.88"/>
<text xml:space="preserve" text-anchor="start" x="778.5" y="-261.32" font-family="Helvetica,sans-Serif" font-size="9.00">dot&#45;to&#45;vector&#45;native.mts</text>
</a>
</g>
</g>
<!-- src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts -->
<g id="node40" class="node">
<title>src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts</title>
<g id="a_node40"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/vector/vector-native-dot-with-fallback.mts" xlink:title="vector&#45;native&#45;dot&#45;with&#45;fallback.mts">
<path fill="#ccccff" stroke="black" d="M728.58,-273.88C728.58,-273.88 585.67,-273.88 585.67,-273.88 582.71,-273.88 579.75,-270.92 579.75,-267.96 579.75,-267.96 579.75,-262.04 579.75,-262.04 579.75,-259.08 582.71,-256.12 585.67,-256.12 585.67,-256.12 728.58,-256.12 728.58,-256.12 731.54,-256.12 734.5,-259.08 734.5,-262.04 734.5,-262.04 734.5,-267.96 734.5,-267.96 734.5,-270.92 731.54,-273.88 728.58,-273.88"/>
<text xml:space="preserve" text-anchor="start" x="587.75" y="-261.32" font-family="Helvetica,sans-Serif" font-size="9.00">vector&#45;native&#45;dot&#45;with&#45;fallback.mts</text>
</a>
</g>
</g>
<!-- src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/options.mts -->
<g id="edge58" class="edge">
<title>src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M717.25,-255.83C717.25,-217.87 717.25,-74.96 717.25,-74.96 717.25,-74.96 1106.26,-74.96 1106.26,-74.96"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1106.26,-77.06 1112.26,-74.96 1106.26,-72.86 1106.26,-77.06"/>
</g>
<!-- src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/render/dot/index.mts -->
<g id="edge59" class="edge">
<title>src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/render/dot/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M726.25,-255.84C726.25,-233.77 726.25,-179.44 726.25,-179.44 726.25,-179.44 789.28,-179.44 789.28,-179.44"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="789.28,-181.54 795.28,-179.44 789.28,-177.34 789.28,-181.54"/>
</g>
<!-- src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/render/vector/dot&#45;to&#45;vector&#45;native.mts -->
<g id="edge60" class="edge">
<title>src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/render/vector/dot&#45;to&#45;vector&#45;native.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M734.7,-265C734.7,-265 761.19,-265 761.19,-265"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="761.19,-267.1 767.19,-265 761.19,-262.9 761.19,-267.1"/>
</g>
</g>
</svg>
    <script>
      var gMode = new Mode();

var title2ElementMap = (function makeElementMap() {
  /** @type {NodeListOf<SVGGElement>} */
  var nodes = document.querySelectorAll(".node");
  /** @type {NodeListOf<SVGGElement>} */
  var edges = document.querySelectorAll(".edge");
  return new Title2ElementMap(edges, nodes);
})();

function getHoverHandler(pTitle2ElementMap) {
  /** @type {string} */
  var currentHighlightedTitle = "";

  /** @param {MouseEvent} pMouseEvent */
  return function hoverHighlightHandler(pMouseEvent) {
    var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
    var closestTitleText = getTitleText(closestNodeOrEdge);

    if (
      currentHighlightedTitle !== closestTitleText &&
      gMode.get() === gMode.HOVER
    ) {
      resetNodesAndEdges();
      addHighlight(closestNodeOrEdge);
      pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
      currentHighlightedTitle = closestTitleText;
    }
  };
}

function getSelectHandler(pTitle2ElementMap) {
  /** @type {string} */
  var currentHighlightedTitle = "";

  /** @param {MouseEvent} pMouseEvent */
  return function selectHighlightHandler(pMouseEvent) {
    pMouseEvent.preventDefault();

    var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
    var closestTitleText = getTitleText(closestNodeOrEdge);

    if (closestNodeOrEdge) {
      gMode.setToSelect();
    } else {
      gMode.setToHover();
    }
    if (currentHighlightedTitle !== closestTitleText) {
      resetNodesAndEdges();
      addHighlight(closestNodeOrEdge);
      pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
      currentHighlightedTitle = closestTitleText;
    }
  };
}
function Mode() {
  var HOVER = 1;
  var SELECT = 2;

  function setToHover() {
    this._mode = HOVER;
  }
  function setToSelect() {
    this._mode = SELECT;
  }

  /**
   * @returns {number}
   */
  function get() {
    return this._mode || HOVER;
  }

  return {
    HOVER: HOVER,
    SELECT: SELECT,
    setToHover: setToHover,
    setToSelect: setToSelect,
    get: get,
  };
}

/**
 *
 * @param {SVGGelement[]} pEdges
 * @param {SVGGElement[]} pNodes
 * @return {{get: (pTitleText:string) => SVGGElement[]}}
 */
function Title2ElementMap(pEdges, pNodes) {
  /* {{[key: string]: SVGGElement[]}} */
  var elementMap = buildMap(pEdges, pNodes);

  /**
   * @param {NodeListOf<SVGGElement>} pEdges
   * @param {NodeListOf<SVGGElement>} pNodes
   * @return {{[key: string]: SVGGElement[]}}
   */
  function buildMap(pEdges, pNodes) {
    var title2NodeMap = buildTitle2NodeMap(pNodes);

    return nodeListToArray(pEdges).reduce(addEdgeToMap(title2NodeMap), {});
  }
  /**
   * @param {NodeListOf<SVGGElement>} pNodes
   * @return {{[key: string]: SVGGElement}}
   */
  function buildTitle2NodeMap(pNodes) {
    return nodeListToArray(pNodes).reduce(addNodeToMap, {});
  }

  function addNodeToMap(pMap, pNode) {
    var titleText = getTitleText(pNode);

    if (titleText) {
      pMap[titleText] = pNode;
    }
    return pMap;
  }

  function addEdgeToMap(pNodeMap) {
    return function (pEdgeMap, pEdge) {
      /** @type {string} */
      var titleText = getTitleText(pEdge);

      if (titleText) {
        var edge = pryEdgeFromTitle(titleText);

        pEdgeMap[titleText] = [pNodeMap[edge.from], pNodeMap[edge.to]];
        (pEdgeMap[edge.from] || (pEdgeMap[edge.from] = [])).push(pEdge);
        (pEdgeMap[edge.to] || (pEdgeMap[edge.to] = [])).push(pEdge);
      }
      return pEdgeMap;
    };
  }

  /**
   *
   * @param {string} pString
   * @return {{from?: string; to?:string;}}
   */
  function pryEdgeFromTitle(pString) {
    var nodeNames = pString.split(/\s*->\s*/);

    return {
      from: nodeNames.shift(),
      to: nodeNames.shift(),
    };
  }
  /**
   *
   * @param {string} pTitleText
   * @return {SVGGElement[]}
   */
  function get(pTitleText) {
    return (pTitleText && elementMap[pTitleText]) || [];
  }
  return {
    get: get,
  };
}

/**
 * @param {SVGGElement} pGElement
 * @return {string?}
 */
function getTitleText(pGElement) {
  /** @type {SVGTitleElement} */
  var title = pGElement && pGElement.querySelector("title");
  /** @type {string} */
  var titleText = title && title.textContent;

  if (titleText) {
    titleText = titleText.trim();
  }
  return titleText;
}

/**
 * @param {NodeListOf<Element>} pNodeList
 * @return {Element[]}
 */
function nodeListToArray(pNodeList) {
  var lReturnValue = [];

  pNodeList.forEach(function (pElement) {
    lReturnValue.push(pElement);
  });

  return lReturnValue;
}

function resetNodesAndEdges() {
  nodeListToArray(document.querySelectorAll(".current")).forEach(
    removeHighlight,
  );
}

/**
 * @param {SVGGElement} pGElement
 */
function removeHighlight(pGElement) {
  if (pGElement && pGElement.classList) {
    pGElement.classList.remove("current");
  }
}

/**
 * @param {SVGGElement} pGroup
 */
function addHighlight(pGroup) {
  if (pGroup && pGroup.classList) {
    pGroup.classList.add("current");
  }
}

var gHints = {
  HIDDEN: 1,
  SHOWN: 2,
  state: 1, // === HIDDEN
  show: function () {
    document.getElementById("hints").removeAttribute("style");
    gHints.state = gHints.SHOWN;
  },
  hide: function () {
    document.getElementById("hints").style = "display:none";
    gHints.state = gHints.HIDDEN;
  },
  toggle: function () {
    if ((gHints.state || gHints.HIDDEN) === gHints.HIDDEN) {
      gHints.show();
    } else {
      gHints.hide();
    }
  },
};

/** @param {KeyboardEvent} pKeyboardEvent */
function keyboardEventHandler(pKeyboardEvent) {
  if (pKeyboardEvent.key === "Escape") {
    resetNodesAndEdges();
    gMode.setToHover();
    gHints.hide();
  }
  if (pKeyboardEvent.key === "F1") {
    pKeyboardEvent.preventDefault();
    gHints.toggle();
  }
}

document.addEventListener("contextmenu", getSelectHandler(title2ElementMap));
document.addEventListener("mouseover", getHoverHandler(title2ElementMap));
document.addEventListener("keydown", keyboardEventHandler);
document.getElementById("close-hints").addEventListener("click", gHints.hide);
document.getElementById("button_help").addEventListener("click", gHints.toggle);
document.querySelector("svg").insertAdjacentHTML(
  "afterbegin",
  `<linearGradient id="edgeGradient">
      <stop offset="0%" stop-color="fuchsia"/>
      <stop offset="100%" stop-color="purple"/>
   </linearGradient>
  `,
);

// Add a small increment to the last value of the path to make gradients on
// horizontal paths work. Without them all browsers I tested with (firefox,
// chrome) do not render the gradient, but instead make the line transparent
// (or the color of the background, I haven't looked into it that deeply,
// but for the hack it doesn't matter which).
function skewLineABit(lDrawingInstructions) {
  var lLastValue = lDrawingInstructions.match(/(\d+\.?\d*)$/)[0];
  // Smaller values than .001 _should_ work as well, but don't in all
  // cases. Even this value is so small that it is not visible to the
  // human eye (tested with the two I have at my disposal).
  var lIncrement = 0.001;
  var lNewLastValue = parseFloat(lLastValue) + lIncrement;

  return lDrawingInstructions.replace(lLastValue, lNewLastValue);
}

nodeListToArray(document.querySelectorAll("path"))
  .filter(function (pElement) {
    return pElement.parentElement.classList.contains("edge");
  })
  .forEach(function (pElement) {
    pElement.attributes.d.value = skewLineABit(pElement.attributes.d.value);
  });

    </script>
  </body>
</html>
